from flask import jsonify

from tools.model import PackInstance
from tools.request import RequestGetJsonWithRequired

def Response(msg, code=200):
    if isinstance(msg, dict):
        return jsonify(msg), code
    else:
        return jsonify({"msg": f"{msg}"}), code

def ResponseInvalidPost():
    return Response("无效表单参数，检查required与提交参数",400)

def ResponseInvalidInstance():
    return Response("无效instance",400)

def ResponseInvalidModel():
    return Response("无效Model",400)

def ResponseInvalidCallback():
    return Response("无效callback",400)

def ResponseInvalidSession():
    return Response("无效flask session",400)

def ResponseInvalidRoute():
    return Response("无效路由",400)

def ResponseOneInstance(instance):
    """
    返回单个实例的响应。
    :param instance: ORM 实例
    :return: Response 对象
    """

    ins = PackInstance(instance)
    if not ins:
        return ResponseInvalidInstance()

    return Response(ins)


def ResponsePostJson( required, _cb):
    """
    通用的 POST 处理函数，用于创建或更新数据库实例。

    :param Model: 数据库模型类，用于创建新实例
    :param required: 需要从请求中获取的必填字段列表
    :param success_msg: 操作成功时返回的消息
    :param _cb: 可选的回调函数，在实例创建后执行
    :return: Flask 响应对象，指示操作结果
    """
    json = RequestGetJsonWithRequired(required)
    if not json:
        return ResponseInvalidPost()

    if _cb:
        return _cb(json)
    return ResponseInvalidCallback()

